param( [Parameter(Mandatory = $true)] [string]$Drive, [Parameter(Mandatory = $true)] [string]$NetworkPath, [Parameter(Mandatory = $true)] [string]$ApprovedServers, [int]$MaximumDelayInSeconds = 0 ) [int]$mappedCount = 0 [string]$mappedDrives = "" if ($MaximumDelayInSeconds -lt 0 -or $MaximumDelayInSeconds -ge 600) { throw "MaximumDelayInSeconds must be between 0 and 599." } if ($MaximumDelayInSeconds -gt 0) { $delay = Get-Random -Minimum 0 -Maximum ($MaximumDelayInSeconds + 1) Start-Sleep -Seconds $delay } $driveLetters = $Drive.Split(',') | ForEach-Object { $_.Trim().TrimEnd(':').ToUpper() } $networkPaths = $NetworkPath.Split(',') | ForEach-Object { $_.Trim() } if ($driveLetters.Count -ne $networkPaths.Count) { throw "The number of drive letters must match the number of network paths." } for ($i = 0; $i -lt $driveLetters.Count; $i++) { $driveLetter = $driveLetters[$i] $sharePath = $networkPaths[$i] if ($driveLetter -notmatch '^[A-Z]$') { throw "Invalid drive letter '$driveLetter'." } if ($sharePath -notmatch '^\\\\[^\\]+\\[^\\]+') { throw "Invalid UNC path '$sharePath'." } $serverName = ($sharePath -replace '^\\\\([^\\]+).*', '$1').ToUpper() if ($serverName -notin $approvedServerList) { throw "Server '$serverName' is not in the approved server list." } $existingPsDrive = Get-PSDrive | Where-Object { $_.Name -eq $driveLetter } if ($null -ne $existingPsDrive) { Remove-PSDrive -Name $driveLetter -Force } $existingNetworkDrive = Get-CimInstance -ClassName Win32_LogicalDisk | Where-Object { $_.DriveType -eq 4 -and $_.DeviceID -eq "$driveLetter`:" } if ($null -ne $existingNetworkDrive) { $deleteOutput = cmd.exe /c "net use $driveLetter`: /delete /y" if ($LASTEXITCODE -ne 0) { throw "Failed to remove existing mapping for drive $driveLetter. Output: $deleteOutput" } } New-PSDrive ` -Name $driveLetter ` -PSProvider FileSystem ` -Root $sharePath ` -Persist ` -Scope Global | Out-Null $mappedCount++ $mappedDrives += "$driveLetter`:->$sharePath; " } Write-Output "MappedCount: $mappedCount" Write-Output "MappedDrives: $mappedDrives"